{
  "Lucene.Net.Analysis.Ar.ArabicAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicAnalyzer.html",
    "title": "Class ArabicAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ArabicAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicLetterTokenizer.html",
    "title": "Class ArabicLetterTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory . Declaration public ArabicLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene version to match - See Lucene.Net.Util.LuceneVersion . Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicLetterTokenizerFactory.html",
    "title": "Class ArabicLetterTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicNormalizationFilter.html",
    "title": "Class ArabicNormalizationFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ArabicNormalizationFilter A Lucene.Net.Analysis.TokenFilter that applies ArabicNormalizer to normalize the orthography. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ArabicNormalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicNormalizationFilterFactory.html",
    "title": "Class ArabicNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Ar.ArabicNormalizer.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicNormalizer.html",
    "title": "Class ArabicNormalizer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Ar.ArabicStemFilter.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicStemFilter.html",
    "title": "Class ArabicStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ArabicStemFilter A Lucene.Net.Analysis.TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ArabicStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicStemFilterFactory.html",
    "title": "Class ArabicStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Ar.ArabicStemmer.html": {
    "href": "Lucene.Net.Analysis.Ar.ArabicStemmer.html",
    "title": "Class ArabicStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Ar.html": {
    "href": "Lucene.Net.Analysis.Ar.html",
    "title": "Namespace Lucene.Net.Analysis.Ar | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies ArabicStemmer to stem Arabic words.. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Bg.BulgarianAnalyzer.html",
    "title": "Class BulgarianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class BulgarianAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Bg.BulgarianStemFilter.html": {
    "href": "Lucene.Net.Analysis.Bg.BulgarianStemFilter.html",
    "title": "Class BulgarianStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class BulgarianStemFilter A Lucene.Net.Analysis.TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter BulgarianStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Bg.BulgarianStemFilterFactory.html",
    "title": "Class BulgarianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Bg.BulgarianStemmer.html": {
    "href": "Lucene.Net.Analysis.Bg.BulgarianStemmer.html",
    "title": "Class BulgarianStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Bg.html": {
    "href": "Lucene.Net.Analysis.Bg.html",
    "title": "Namespace Lucene.Net.Analysis.Bg | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies BulgarianStemmer to stem Bulgarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Br.BrazilianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Br.BrazilianAnalyzer.html",
    "title": "Class BrazilianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class BrazilianAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.TokenStreamComponents built from a StandardTokenizer filtered with LowerCaseFilter , StandardFilter , StopFilter , and BrazilianStemFilter . Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Br.BrazilianStemFilter.html": {
    "href": "Lucene.Net.Analysis.Br.BrazilianStemFilter.html",
    "title": "Class BrazilianStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class BrazilianStemFilter A Lucene.Net.Analysis.TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter BrazilianStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in the source Lucene.Net.Analysis.TokenStream Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Br.BrazilianStemFilterFactory.html",
    "title": "Class BrazilianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream in Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Br.BrazilianStemmer.html": {
    "href": "Lucene.Net.Analysis.Br.BrazilianStemmer.html",
    "title": "Class BrazilianStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Br.html": {
    "href": "Lucene.Net.Analysis.Br.html",
    "title": "Namespace Lucene.Net.Analysis.Br | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . BrazilianStemFilter A Lucene.Net.Analysis.TokenFilter that applies BrazilianStemmer . To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Ca.CatalanAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Ca.CatalanAnalyzer.html",
    "title": "Class CatalanAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CatalanAnalyzer Lucene.Net.Analysis.Analyzer for Catalan. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating CatalanAnalyzer: Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ca.html": {
    "href": "Lucene.Net.Analysis.Ca.html",
    "title": "Namespace Lucene.Net.Analysis.Ca | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Catalan. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating CatalanAnalyzer:"
  },
  "Lucene.Net.Analysis.CharFilters.BaseCharFilter.html": {
    "href": "Lucene.Net.Analysis.CharFilters.BaseCharFilter.html",
    "title": "Class BaseCharFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class BaseCharFilter Base utility class for implementing a Lucene.Net.Analysis.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 Lucene.Net.Analysis.CharFilter BaseCharFilter HTMLStripCharFilter MappingCharFilter PatternReplaceCharFilter BufferedCharFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Read(Char[], Int32, Int32) Lucene.Net.Analysis.CharFilter.Read() CharFilter.Skip(Int32) Lucene.Net.Analysis.CharFilter.Reset() Lucene.Net.Analysis.CharFilter.IsReady Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.CharFilters.html": {
    "href": "Lucene.Net.Analysis.CharFilters.html",
    "title": "Namespace Lucene.Net.Analysis.CharFilters | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html": {
    "href": "Lucene.Net.Analysis.CharFilters.HTMLStripCharFilter.html",
    "title": "Class HTMLStripCharFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HTMLStripCharFilter A Lucene.Net.Analysis.CharFilter that wraps another System.IO.TextReader and attempts to strip out HTML constructs. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader Lucene.Net.Analysis.CharFilter BaseCharFilter HTMLStripCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) Lucene.Net.Analysis.CharFilter.m_input CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) Lucene.Net.Analysis.CharFilter.Reset() Lucene.Net.Analysis.CharFilter.IsReady Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html": {
    "href": "Lucene.Net.Analysis.CharFilters.HTMLStripCharFilterFactory.html",
    "title": "Class HTMLStripCharFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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)"
  },
  "Lucene.Net.Analysis.CharFilters.MappingCharFilter.html": {
    "href": "Lucene.Net.Analysis.CharFilters.MappingCharFilter.html",
    "title": "Class MappingCharFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class MappingCharFilter Simplistic Lucene.Net.Analysis.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 Lucene.Net.Analysis.CharFilter BaseCharFilter MappingCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) Lucene.Net.Analysis.CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) Lucene.Net.Analysis.CharFilter.IsReady Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.CharFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html": {
    "href": "Lucene.Net.Analysis.CharFilters.MappingCharFilterFactory.html",
    "title": "Class MappingCharFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html": {
    "href": "Lucene.Net.Analysis.CharFilters.NormalizeCharMap.Builder.html",
    "title": "Class NormalizeCharMap.Builder | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html": {
    "href": "Lucene.Net.Analysis.CharFilters.NormalizeCharMap.html",
    "title": "Class NormalizeCharMap | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Cjk.CJKAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKAnalyzer.html",
    "title": "Class CJKAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CJKAnalyzer An Lucene.Net.Analysis.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Cjk.CJKBigramFilter.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKBigramFilter.html",
    "title": "Class CJKBigramFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter CJKBigramFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream in Input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream in Input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKBigramFilterFactory.html",
    "title": "Class CJKBigramFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Cjk.CJKScript.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKScript.html",
    "title": "Enum CJKScript | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Cjk.CJKTokenizer.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKTokenizer.html",
    "title": "Class CJKTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CJKTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKTokenizerFactory.html",
    "title": "Class CJKTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader in Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Cjk.CJKWidthFilter.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKWidthFilter.html",
    "title": "Class CJKWidthFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CJKWidthFilter A Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter CJKWidthFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Cjk.CJKWidthFilterFactory.html",
    "title": "Class CJKWidthFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Cjk.html": {
    "href": "Lucene.Net.Analysis.Cjk.html",
    "title": "Namespace Lucene.Net.Analysis.Cjk | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ckb.html": {
    "href": "Lucene.Net.Analysis.Ckb.html",
    "title": "Namespace Lucene.Net.Analysis.Ckb | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Sorani Kurdish. SoraniNormalizationFilter A Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Ckb.SoraniAnalyzer.html",
    "title": "Class SoraniAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SoraniAnalyzer Lucene.Net.Analysis.Analyzer for Sorani Kurdish. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html": {
    "href": "Lucene.Net.Analysis.Ckb.SoraniNormalizationFilter.html",
    "title": "Class SoraniNormalizationFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SoraniNormalizationFilter A Lucene.Net.Analysis.TokenFilter that applies SoraniNormalizer to normalize the orthography. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter SoraniNormalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Ckb.SoraniNormalizationFilterFactory.html",
    "title": "Class SoraniNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Ckb.SoraniNormalizer.html": {
    "href": "Lucene.Net.Analysis.Ckb.SoraniNormalizer.html",
    "title": "Class SoraniNormalizer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Ckb.SoraniStemFilter.html": {
    "href": "Lucene.Net.Analysis.Ckb.SoraniStemFilter.html",
    "title": "Class SoraniStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SoraniStemFilter A Lucene.Net.Analysis.TokenFilter that applies SoraniStemmer to stem Sorani words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter SoraniStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Ckb.SoraniStemFilterFactory.html",
    "title": "Class SoraniStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Ckb.SoraniStemmer.html": {
    "href": "Lucene.Net.Analysis.Ckb.SoraniStemmer.html",
    "title": "Class SoraniStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Cn.ChineseAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Cn.ChineseAnalyzer.html",
    "title": "Class ChineseAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ChineseAnalyzer An Lucene.Net.Analysis.Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.TokenStreamComponents built from a ChineseTokenizer filtered with ChineseFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Cn.ChineseFilter.html": {
    "href": "Lucene.Net.Analysis.Cn.ChineseFilter.html",
    "title": "Class ChineseFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ChineseFilter A Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ChineseFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Cn.ChineseFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Cn.ChineseFilterFactory.html",
    "title": "Class ChineseFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream in Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Cn.ChineseTokenizer.html": {
    "href": "Lucene.Net.Analysis.Cn.ChineseTokenizer.html",
    "title": "Class ChineseTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer ChineseTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Cn.ChineseTokenizerFactory.html",
    "title": "Class ChineseTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Cn.html": {
    "href": "Lucene.Net.Analysis.Cn.html",
    "title": "Namespace Lucene.Net.Analysis.Cn | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer that tokenizes text with ChineseTokenizer and filters with ChineseFilter ChineseFilter A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html": {
    "href": "Lucene.Net.Analysis.CommonGrams.CommonGramsFilter.html",
    "title": "Class CommonGramsFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter CommonGramsFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion lucene compatibility version Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Analysis.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., Lucene.Net.Analysis.Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input Lucene.Net.Analysis.TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html": {
    "href": "Lucene.Net.Analysis.CommonGrams.CommonGramsFilterFactory.html",
    "title": "Class CommonGramsFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html": {
    "href": "Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilter.html",
    "title": "Class CommonGramsQueryFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter CommonGramsQueryFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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., Lucene.Net.Analysis.Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input Lucene.Net.Analysis.TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html": {
    "href": "Lucene.Net.Analysis.CommonGrams.CommonGramsQueryFilterFactory.html",
    "title": "Class CommonGramsQueryFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides CommonGramsFilterFactory.Create(TokenStream) Implements IResourceLoaderAware"
  },
  "Lucene.Net.Analysis.CommonGrams.html": {
    "href": "Lucene.Net.Analysis.CommonGrams.html",
    "title": "Namespace Lucene.Net.Analysis.CommonGrams | Apache Lucene.NET 4.8.0-beta00011 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>"
  },
  "Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html": {
    "href": "Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.CompoundToken.html",
    "title": "Class CompoundWordTokenFilterBase.CompoundToken | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html": {
    "href": "Lucene.Net.Analysis.Compound.CompoundWordTokenFilterBase.html",
    "title": "Class CompoundWordTokenFilterBase | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CompoundWordTokenFilterBase Base class for decomposition token filters. You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter CompoundWordTokenFilterBase DictionaryCompoundWordTokenFilter HyphenationCompoundWordTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenAttributes.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 Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute | Improve this Doc View Source m_tokens Declaration protected readonly Queue<CompoundWordTokenFilterBase.CompoundToken> m_tokens Field Value Type Description System.Collections.Generic.Queue < 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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilter.html",
    "title": "Class DictionaryCompoundWordTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class DictionaryCompoundWordTokenFilter A Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.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() Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. Lucene.Net.Analysis.TokenStream input the Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. Lucene.Net.Analysis.TokenStream input the Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Compound.DictionaryCompoundWordTokenFilterFactory.html",
    "title": "Class DictionaryCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Compound.html": {
    "href": "Lucene.Net.Analysis.Compound.html",
    "title": "Namespace Lucene.Net.Analysis.Compound | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Util.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>"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.ByteVector.html",
    "title": "Class ByteVector | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.CharVector.html",
    "title": "Class CharVector | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.html",
    "title": "Namespace Lucene.Net.Analysis.Compound.Hyphenation | Apache Lucene.NET 4.8.0-beta00011 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."
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.Hyphen.html",
    "title": "Class Hyphen | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.Hyphenation.html",
    "title": "Class Hyphenation | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.HyphenationTree.html",
    "title": "Class HyphenationTree | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.IPatternConsumer.html",
    "title": "Interface IPatternConsumer | Apache Lucene.NET 4.8.0-beta00011 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."
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.PatternParser.html",
    "title": "Class PatternParser | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.html",
    "title": "Class TernaryTree | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html": {
    "href": "Lucene.Net.Analysis.Compound.Hyphenation.TernaryTree.Iterator.html",
    "title": "Class TernaryTree.Iterator | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilter.html",
    "title": "Class HyphenationCompoundWordTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HyphenationCompoundWordTokenFilter A Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.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() Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. Lucene.Net.Analysis.TokenStream input the Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the dictionaries if Version > 3.0. See CompoundWordTokenFilterBase for details. Lucene.Net.Analysis.TokenStream input the Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Compound.HyphenationCompoundWordTokenFilterFactory.html",
    "title": "Class HyphenationCompoundWordTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Core.html": {
    "href": "Lucene.Net.Analysis.Core.html",
    "title": "Namespace Lucene.Net.Analysis.Core | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.Analyzer that uses WhitespaceTokenizer . You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.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>"
  },
  "Lucene.Net.Analysis.Core.KeywordAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Core.KeywordAnalyzer.html",
    "title": "Class KeywordAnalyzer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Core.KeywordTokenizer.html": {
    "href": "Lucene.Net.Analysis.Core.KeywordTokenizer.html",
    "title": "Class KeywordTokenizer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class KeywordTokenizer Emits the entire input as a single token. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer KeywordTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Core.KeywordTokenizerFactory.html",
    "title": "Class KeywordTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Core.LetterTokenizer.html": {
    "href": "Lucene.Net.Analysis.Core.LetterTokenizer.html",
    "title": "Class LetterTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CharTokenizer LetterTokenizer ArabicLetterTokenizer LowerCaseTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory . Declaration public LetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.LuceneVersion to match Lucene.Net.Util.AttributeSource.AttributeFactory factory the attribute factory to use for this Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Core.LetterTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Core.LetterTokenizerFactory.html",
    "title": "Class LetterTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Core.LowerCaseFilter.html": {
    "href": "Lucene.Net.Analysis.Core.LowerCaseFilter.html",
    "title": "Class LowerCaseFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class LowerCaseFilter Normalizes token text to lower case. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating LowerCaseFilter: As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter LowerCaseFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion See Lucene.Net.Util.LuceneVersion Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Core.LowerCaseFilterFactory.html",
    "title": "Class LowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Core.LowerCaseTokenizer.html": {
    "href": "Lucene.Net.Analysis.Core.LowerCaseTokenizer.html",
    "title": "Class LowerCaseTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CharTokenizer LetterTokenizer LowerCaseTokenizer Implements System.IDisposable Inherited Members LetterTokenizer.IsTokenChar(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory . Declaration public LowerCaseTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.LuceneVersion to match Lucene.Net.Util.AttributeSource.AttributeFactory factory the attribute factory to use for this Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Core.LowerCaseTokenizerFactory.html",
    "title": "Class LowerCaseTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Core.SimpleAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Core.SimpleAnalyzer.html",
    "title": "Class SimpleAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SimpleAnalyzer An Lucene.Net.Analysis.Analyzer that filters LetterTokenizer with LowerCaseFilter You must specify the required Lucene.Net.Util.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Core.StopAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Core.StopAnalyzer.html",
    "title": "Class StopAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class StopAnalyzer Filters LetterTokenizer with LowerCaseFilter and StopFilter . You must specify the required Lucene.Net.Util.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion See Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion See Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion See Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion See Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.TokenStreamComponents built from a LowerCaseTokenizer filtered with StopFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Core.StopFilter.html": {
    "href": "Lucene.Net.Analysis.Core.StopFilter.html",
    "title": "Class StopFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class StopFilter Removes stop words from a token stream. You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FilteringTokenFilter StopFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream that are named in the CharArraySet . Declaration public StopFilter(LuceneVersion matchVersion, TokenStream in, CharArraySet stopWords) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene version to enable correct Unicode 4.0 behavior in the stop set if Version > 3.0. See Lucene.Net.Util.LuceneVersion > for details. Lucene.Net.Analysis.TokenStream in Input Lucene.Net.Analysis.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 Lucene.Net.Analysis.Analyzer is constructed. Declaration public static CharArraySet MakeStopSet(LuceneVersion matchVersion, params string[] stopWords) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Analysis.Analyzer is constructed. Declaration public static CharArraySet MakeStopSet<T1>(LuceneVersion matchVersion, IList<T1> stopWords) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Core.StopFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Core.StopFilterFactory.html",
    "title": "Class StopFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Core.TypeTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Core.TypeTokenFilter.html",
    "title": "Class TypeTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TypeTokenFilter Removes tokens whose types appear in a set of blocked types from a token stream. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FilteringTokenFilter TypeTokenFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version the Lucene.Net.Util.LuceneVersion match version Lucene.Net.Analysis.TokenStream input the Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version System.Boolean enablePositionIncrements Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version System.Boolean enablePositionIncrements Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Core.TypeTokenFilterFactory.html",
    "title": "Class TypeTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Core.UpperCaseFilter.html": {
    "href": "Lucene.Net.Analysis.Core.UpperCaseFilter.html",
    "title": "Class UpperCaseFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class UpperCaseFilter Normalizes token text to UPPER CASE. You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter UpperCaseFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion See Lucene.Net.Util.LuceneVersion Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Core.UpperCaseFilterFactory.html",
    "title": "Class UpperCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Core.WhitespaceAnalyzer.html",
    "title": "Class WhitespaceAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class WhitespaceAnalyzer An Lucene.Net.Analysis.Analyzer that uses WhitespaceTokenizer . You must specify the required Lucene.Net.Util.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Core.WhitespaceTokenizer.html": {
    "href": "Lucene.Net.Analysis.Core.WhitespaceTokenizer.html",
    "title": "Class WhitespaceTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CharTokenizer WhitespaceTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory . Declaration public WhitespaceTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.LuceneVersion to match Lucene.Net.Util.AttributeSource.AttributeFactory factory the attribute factory to use for this Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Core.WhitespaceTokenizerFactory.html",
    "title": "Class WhitespaceTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Cz.CzechAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Cz.CzechAnalyzer.html",
    "title": "Class CzechAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CzechAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Cz.CzechStemFilter.html": {
    "href": "Lucene.Net.Analysis.Cz.CzechStemFilter.html",
    "title": "Class CzechStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CzechStemFilter A Lucene.Net.Analysis.TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . NOTE : Input is expected to be in lowercase, but with diacritical marks Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter CzechStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Cz.CzechStemFilterFactory.html",
    "title": "Class CzechStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Cz.CzechStemmer.html": {
    "href": "Lucene.Net.Analysis.Cz.CzechStemmer.html",
    "title": "Class CzechStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Cz.html": {
    "href": "Lucene.Net.Analysis.Cz.html",
    "title": "Namespace Lucene.Net.Analysis.Cz | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenFilter that applies CzechStemmer to stem Czech words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Da.DanishAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Da.DanishAnalyzer.html",
    "title": "Class DanishAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class DanishAnalyzer Lucene.Net.Analysis.Analyzer for Danish. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Da.html": {
    "href": "Lucene.Net.Analysis.Da.html",
    "title": "Namespace Lucene.Net.Analysis.Da | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Danish."
  },
  "Lucene.Net.Analysis.De.GermanAnalyzer.html": {
    "href": "Lucene.Net.Analysis.De.GermanAnalyzer.html",
    "title": "Class GermanAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GermanAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.De.GermanLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.De.GermanLightStemFilter.html",
    "title": "Class GermanLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GermanLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GermanLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.De.GermanLightStemFilterFactory.html",
    "title": "Class GermanLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.De.GermanLightStemmer.html": {
    "href": "Lucene.Net.Analysis.De.GermanLightStemmer.html",
    "title": "Class GermanLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.De.GermanMinimalStemFilter.html": {
    "href": "Lucene.Net.Analysis.De.GermanMinimalStemFilter.html",
    "title": "Class GermanMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GermanMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GermanMinimalStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.De.GermanMinimalStemFilterFactory.html",
    "title": "Class GermanMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.De.GermanMinimalStemmer.html": {
    "href": "Lucene.Net.Analysis.De.GermanMinimalStemmer.html",
    "title": "Class GermanMinimalStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.De.GermanNormalizationFilter.html": {
    "href": "Lucene.Net.Analysis.De.GermanNormalizationFilter.html",
    "title": "Class GermanNormalizationFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GermanNormalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.De.GermanNormalizationFilterFactory.html",
    "title": "Class GermanNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.De.GermanStemFilter.html": {
    "href": "Lucene.Net.Analysis.De.GermanStemFilter.html",
    "title": "Class GermanStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GermanStemFilter A Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GermanStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in the source Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also SetKeywordMarkerFilter"
  },
  "Lucene.Net.Analysis.De.GermanStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.De.GermanStemFilterFactory.html",
    "title": "Class GermanStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream in Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.De.GermanStemmer.html": {
    "href": "Lucene.Net.Analysis.De.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.De.html": {
    "href": "Lucene.Net.Analysis.De.html",
    "title": "Namespace Lucene.Net.Analysis.De | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion compatibility when creating GermanAnalyzer: NOTE : This class uses the same Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . GermanLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies GermanLightStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies GermanMinimalStemmer to stem German words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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)."
  },
  "Lucene.Net.Analysis.El.GreekAnalyzer.html": {
    "href": "Lucene.Net.Analysis.El.GreekAnalyzer.html",
    "title": "Class GreekAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GreekAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene compatibility version, See Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene compatibility version, See Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.TokenStreamComponents built from a StandardTokenizer filtered with GreekLowerCaseFilter , StandardFilter , StopFilter , and GreekStemFilter Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.El.GreekLowerCaseFilter.html": {
    "href": "Lucene.Net.Analysis.El.GreekLowerCaseFilter.html",
    "title": "Class GreekLowerCaseFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.LuceneVersion compatibility when creating GreekLowerCaseFilter : As of 3.1, supplementary characters are properly lowercased. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GreekLowerCaseFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene compatibility version, See Lucene.Net.Util.LuceneVersion Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html": {
    "href": "Lucene.Net.Analysis.El.GreekLowerCaseFilterFactory.html",
    "title": "Class GreekLowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream in Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.El.GreekStemFilter.html": {
    "href": "Lucene.Net.Analysis.El.GreekStemFilter.html",
    "title": "Class GreekStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GreekStemFilter A Lucene.Net.Analysis.TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GreekStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.El.GreekStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.El.GreekStemFilterFactory.html",
    "title": "Class GreekStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.El.GreekStemmer.html": {
    "href": "Lucene.Net.Analysis.El.GreekStemmer.html",
    "title": "Class GreekStemmer | Apache Lucene.NET 4.8.0-beta00011 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."
  },
  "Lucene.Net.Analysis.El.html": {
    "href": "Lucene.Net.Analysis.El.html",
    "title": "Namespace Lucene.Net.Analysis.El | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenFilter that applies GreekStemmer to stem Greek words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.En.EnglishAnalyzer.html": {
    "href": "Lucene.Net.Analysis.En.EnglishAnalyzer.html",
    "title": "Class EnglishAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class EnglishAnalyzer Lucene.Net.Analysis.Analyzer for English. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html": {
    "href": "Lucene.Net.Analysis.En.EnglishMinimalStemFilter.html",
    "title": "Class EnglishMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class EnglishMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter EnglishMinimalStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.En.EnglishMinimalStemFilterFactory.html",
    "title": "Class EnglishMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.En.EnglishMinimalStemmer.html": {
    "href": "Lucene.Net.Analysis.En.EnglishMinimalStemmer.html",
    "title": "Class EnglishMinimalStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.En.EnglishPossessiveFilter.html": {
    "href": "Lucene.Net.Analysis.En.EnglishPossessiveFilter.html",
    "title": "Class EnglishPossessiveFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class EnglishPossessiveFilter TokenFilter that removes possessives (trailing 's) from words. You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter EnglishPossessiveFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input | Improve this Doc View Source EnglishPossessiveFilter(LuceneVersion, TokenStream) Declaration public EnglishPossessiveFilter(LuceneVersion version, TokenStream input) Parameters Type Name Description Lucene.Net.Util.LuceneVersion version Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html": {
    "href": "Lucene.Net.Analysis.En.EnglishPossessiveFilterFactory.html",
    "title": "Class EnglishPossessiveFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.En.html": {
    "href": "Lucene.Net.Analysis.En.html",
    "title": "Namespace Lucene.Net.Analysis.En | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for English. EnglishMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies EnglishMinimalStemmer to stem English words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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>"
  },
  "Lucene.Net.Analysis.En.KStemFilter.html": {
    "href": "Lucene.Net.Analysis.En.KStemFilter.html",
    "title": "Class KStemFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter KStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Exceptions Type Condition System.IO.IOException If there is a low-level I/O error. Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.En.KStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.En.KStemFilterFactory.html",
    "title": "Class KStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.En.KStemmer.html": {
    "href": "Lucene.Net.Analysis.En.KStemmer.html",
    "title": "Class KStemmer | Apache Lucene.NET 4.8.0-beta00011 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 )"
  },
  "Lucene.Net.Analysis.En.PorterStemFilter.html": {
    "href": "Lucene.Net.Analysis.En.PorterStemFilter.html",
    "title": "Class PorterStemFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PorterStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.En.PorterStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.En.PorterStemFilterFactory.html",
    "title": "Class PorterStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Es.html": {
    "href": "Lucene.Net.Analysis.Es.html",
    "title": "Namespace Lucene.Net.Analysis.Es | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Spanish. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. SpanishLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Es.SpanishAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Es.SpanishAnalyzer.html",
    "title": "Class SpanishAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SpanishAnalyzer Lucene.Net.Analysis.Analyzer for Spanish. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating SpanishAnalyzer : As of 3.6, SpanishLightStemFilter is used for less aggressive stemming. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Es.SpanishLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.Es.SpanishLightStemFilter.html",
    "title": "Class SpanishLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SpanishLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies SpanishLightStemmer to stem Spanish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter SpanishLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Es.SpanishLightStemFilterFactory.html",
    "title": "Class SpanishLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Es.SpanishLightStemmer.html": {
    "href": "Lucene.Net.Analysis.Es.SpanishLightStemmer.html",
    "title": "Class SpanishLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Eu.BasqueAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Eu.BasqueAnalyzer.html",
    "title": "Class BasqueAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class BasqueAnalyzer Lucene.Net.Analysis.Analyzer for Basque. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Eu.html": {
    "href": "Lucene.Net.Analysis.Eu.html",
    "title": "Namespace Lucene.Net.Analysis.Eu | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Basque."
  },
  "Lucene.Net.Analysis.Fa.html": {
    "href": "Lucene.Net.Analysis.Fa.html",
    "title": "Namespace Lucene.Net.Analysis.Fa | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Fa.PersianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Fa.PersianAnalyzer.html",
    "title": "Class PersianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PersianAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Fa.PersianCharFilter.html": {
    "href": "Lucene.Net.Analysis.Fa.PersianCharFilter.html",
    "title": "Class PersianCharFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PersianCharFilter Lucene.Net.Analysis.CharFilter that replaces instances of Zero-width non-joiner with an ordinary space. Inheritance System.Object System.MarshalByRefObject System.IO.TextReader Lucene.Net.Analysis.CharFilter PersianCharFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) Lucene.Net.Analysis.CharFilter.Reset() Lucene.Net.Analysis.CharFilter.IsReady Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Fa.PersianCharFilterFactory.html",
    "title": "Class PersianCharFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html": {
    "href": "Lucene.Net.Analysis.Fa.PersianNormalizationFilter.html",
    "title": "Class PersianNormalizationFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PersianNormalizationFilter A Lucene.Net.Analysis.TokenFilter that applies PersianNormalizer to normalize the orthography. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PersianNormalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Fa.PersianNormalizationFilterFactory.html",
    "title": "Class PersianNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Fa.PersianNormalizer.html": {
    "href": "Lucene.Net.Analysis.Fa.PersianNormalizer.html",
    "title": "Class PersianNormalizer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Fi.FinnishAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Fi.FinnishAnalyzer.html",
    "title": "Class FinnishAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class FinnishAnalyzer Lucene.Net.Analysis.Analyzer for Finnish. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.Fi.FinnishLightStemFilter.html",
    "title": "Class FinnishLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class FinnishLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FinnishLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Fi.FinnishLightStemFilterFactory.html",
    "title": "Class FinnishLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Fi.FinnishLightStemmer.html": {
    "href": "Lucene.Net.Analysis.Fi.FinnishLightStemmer.html",
    "title": "Class FinnishLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Fi.html": {
    "href": "Lucene.Net.Analysis.Fi.html",
    "title": "Namespace Lucene.Net.Analysis.Fi | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Finnish. FinnishLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies FinnishLightStemmer to stem Finnish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Fr.FrenchAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchAnalyzer.html",
    "title": "Class FrenchAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class FrenchAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchLightStemFilter.html",
    "title": "Class FrenchLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class FrenchLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FrenchLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchLightStemFilterFactory.html",
    "title": "Class FrenchLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Fr.FrenchLightStemmer.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchLightStemmer.html",
    "title": "Class FrenchLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchMinimalStemFilter.html",
    "title": "Class FrenchMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class FrenchMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FrenchMinimalStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchMinimalStemFilterFactory.html",
    "title": "Class FrenchMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchMinimalStemmer.html",
    "title": "Class FrenchMinimalStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Fr.FrenchStemFilter.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchStemFilter.html",
    "title": "Class FrenchStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class FrenchStemFilter A Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FrenchStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also KeywordMarkerFilter"
  },
  "Lucene.Net.Analysis.Fr.FrenchStemmer.html": {
    "href": "Lucene.Net.Analysis.Fr.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Fr.html": {
    "href": "Lucene.Net.Analysis.Fr.html",
    "title": "Namespace Lucene.Net.Analysis.Fr | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . FrenchLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies FrenchLightStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies FrenchMinimalStemmer to stem French words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ga.html": {
    "href": "Lucene.Net.Analysis.Ga.html",
    "title": "Namespace Lucene.Net.Analysis.Ga | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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>"
  },
  "Lucene.Net.Analysis.Ga.IrishAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Ga.IrishAnalyzer.html",
    "title": "Class IrishAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class IrishAnalyzer Lucene.Net.Analysis.Analyzer for Irish. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html": {
    "href": "Lucene.Net.Analysis.Ga.IrishLowerCaseFilter.html",
    "title": "Class IrishLowerCaseFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter IrishLowerCaseFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Ga.IrishLowerCaseFilterFactory.html",
    "title": "Class IrishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Gl.GalicianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Gl.GalicianAnalyzer.html",
    "title": "Class GalicianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GalicianAnalyzer Lucene.Net.Analysis.Analyzer for Galician. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html": {
    "href": "Lucene.Net.Analysis.Gl.GalicianMinimalStemFilter.html",
    "title": "Class GalicianMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GalicianMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GalicianMinimalStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Gl.GalicianMinimalStemFilterFactory.html",
    "title": "Class GalicianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html": {
    "href": "Lucene.Net.Analysis.Gl.GalicianMinimalStemmer.html",
    "title": "Class GalicianMinimalStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Gl.GalicianStemFilter.html": {
    "href": "Lucene.Net.Analysis.Gl.GalicianStemFilter.html",
    "title": "Class GalicianStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class GalicianStemFilter A Lucene.Net.Analysis.TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter GalicianStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Gl.GalicianStemFilterFactory.html",
    "title": "Class GalicianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Gl.GalicianStemmer.html": {
    "href": "Lucene.Net.Analysis.Gl.GalicianStemmer.html",
    "title": "Class GalicianStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Gl.html": {
    "href": "Lucene.Net.Analysis.Gl.html",
    "title": "Namespace Lucene.Net.Analysis.Gl | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Galician. GalicianMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies GalicianMinimalStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies GalicianStemmer to stem Galician words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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\"."
  },
  "Lucene.Net.Analysis.Hi.HindiAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Hi.HindiAnalyzer.html",
    "title": "Class HindiAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HindiAnalyzer Analyzer for Hindi. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html": {
    "href": "Lucene.Net.Analysis.Hi.HindiNormalizationFilter.html",
    "title": "Class HindiNormalizationFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HindiNormalizationFilter A Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter HindiNormalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also HindiNormalizer"
  },
  "Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Hi.HindiNormalizationFilterFactory.html",
    "title": "Class HindiNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Hi.HindiNormalizer.html": {
    "href": "Lucene.Net.Analysis.Hi.HindiNormalizer.html",
    "title": "Class HindiNormalizer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Hi.HindiStemFilter.html": {
    "href": "Lucene.Net.Analysis.Hi.HindiStemFilter.html",
    "title": "Class HindiStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HindiStemFilter A Lucene.Net.Analysis.TokenFilter that applies HindiStemmer to stem Hindi words. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter HindiStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Hi.HindiStemFilterFactory.html",
    "title": "Class HindiStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Hi.HindiStemmer.html": {
    "href": "Lucene.Net.Analysis.Hi.HindiStemmer.html",
    "title": "Class HindiStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Hi.html": {
    "href": "Lucene.Net.Analysis.Hi.html",
    "title": "Namespace Lucene.Net.Analysis.Hi | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.LuceneVersion compatibility when creating HindiAnalyzer: As of 3.6, StandardTokenizer is used for tokenization HindiNormalizationFilter A Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Hu.html": {
    "href": "Lucene.Net.Analysis.Hu.html",
    "title": "Namespace Lucene.Net.Analysis.Hu | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Hungarian. HungarianLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Hu.HungarianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Hu.HungarianAnalyzer.html",
    "title": "Class HungarianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HungarianAnalyzer Lucene.Net.Analysis.Analyzer for Hungarian. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.Hu.HungarianLightStemFilter.html",
    "title": "Class HungarianLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HungarianLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies HungarianLightStemmer to stem Hungarian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter HungarianLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Hu.HungarianLightStemFilterFactory.html",
    "title": "Class HungarianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Hu.HungarianLightStemmer.html": {
    "href": "Lucene.Net.Analysis.Hu.HungarianLightStemmer.html",
    "title": "Class HungarianLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Hunspell.Dictionary.html": {
    "href": "Lucene.Net.Analysis.Hunspell.Dictionary.html",
    "title": "Class Dictionary | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Hunspell.html": {
    "href": "Lucene.Net.Analysis.Hunspell.html",
    "title": "Namespace Lucene.Net.Analysis.Hunspell | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html": {
    "href": "Lucene.Net.Analysis.Hunspell.HunspellStemFilter.html",
    "title": "Class HunspellStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class HunspellStemFilter Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter HunspellStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream using affix rules in the provided Dictionary Declaration public HunspellStemFilter(TokenStream input, Dictionary dictionary, bool dedup, bool longestOnly) Parameters Type Name Description Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Hunspell.HunspellStemFilterFactory.html",
    "title": "Class HunspellStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream tokenStream Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Hy.ArmenianAnalyzer.html",
    "title": "Class ArmenianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ArmenianAnalyzer Lucene.Net.Analysis.Analyzer for Armenian. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Hy.html": {
    "href": "Lucene.Net.Analysis.Hy.html",
    "title": "Namespace Lucene.Net.Analysis.Hy | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Armenian."
  },
  "Lucene.Net.Analysis.Id.html": {
    "href": "Lucene.Net.Analysis.Id.html",
    "title": "Namespace Lucene.Net.Analysis.Id | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Indonesian (Bahasa) IndonesianStemFilter A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Id.IndonesianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Id.IndonesianAnalyzer.html",
    "title": "Class IndonesianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class IndonesianAnalyzer Lucene.Net.Analysis.Analyzer for Indonesian (Bahasa) Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Id.IndonesianStemFilter.html": {
    "href": "Lucene.Net.Analysis.Id.IndonesianStemFilter.html",
    "title": "Class IndonesianStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class IndonesianStemFilter A Lucene.Net.Analysis.TokenFilter that applies IndonesianStemmer to stem Indonesian words. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter IndonesianStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream input System.Boolean stemDerivational Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Id.IndonesianStemFilterFactory.html",
    "title": "Class IndonesianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Id.IndonesianStemmer.html": {
    "href": "Lucene.Net.Analysis.Id.IndonesianStemmer.html",
    "title": "Class IndonesianStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.In.html": {
    "href": "Lucene.Net.Analysis.In.html",
    "title": "Namespace Lucene.Net.Analysis.In | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.In.IndicNormalizationFilter.html": {
    "href": "Lucene.Net.Analysis.In.IndicNormalizationFilter.html",
    "title": "Class IndicNormalizationFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class IndicNormalizationFilter A Lucene.Net.Analysis.TokenFilter that applies IndicNormalizer to normalize text in Indian Languages. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter IndicNormalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.In.IndicNormalizationFilterFactory.html",
    "title": "Class IndicNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.In.IndicNormalizer.html": {
    "href": "Lucene.Net.Analysis.In.IndicNormalizer.html",
    "title": "Class IndicNormalizer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.In.IndicTokenizer.html": {
    "href": "Lucene.Net.Analysis.In.IndicTokenizer.html",
    "title": "Class IndicTokenizer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class IndicTokenizer Simple Tokenizer for text in Indian Languages. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CharTokenizer IndicTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.It.html": {
    "href": "Lucene.Net.Analysis.It.html",
    "title": "Namespace Lucene.Net.Analysis.It | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Italian. You must specify the required Lucene.Net.Util.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 Lucene.Net.Analysis.TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.It.ItalianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.It.ItalianAnalyzer.html",
    "title": "Class ItalianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ItalianAnalyzer Lucene.Net.Analysis.Analyzer for Italian. You must specify the required Lucene.Net.Util.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.It.ItalianLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.It.ItalianLightStemFilter.html",
    "title": "Class ItalianLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ItalianLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies ItalianLightStemmer to stem Italian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ItalianLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.It.ItalianLightStemFilterFactory.html",
    "title": "Class ItalianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.It.ItalianLightStemmer.html": {
    "href": "Lucene.Net.Analysis.It.ItalianLightStemmer.html",
    "title": "Class ItalianLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Lv.html": {
    "href": "Lucene.Net.Analysis.Lv.html",
    "title": "Namespace Lucene.Net.Analysis.Lv | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Latvian. LatvianStemFilter A Lucene.Net.Analysis.TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Lv.LatvianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Lv.LatvianAnalyzer.html",
    "title": "Class LatvianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class LatvianAnalyzer Lucene.Net.Analysis.Analyzer for Latvian. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Lv.LatvianStemFilter.html": {
    "href": "Lucene.Net.Analysis.Lv.LatvianStemFilter.html",
    "title": "Class LatvianStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class LatvianStemFilter A Lucene.Net.Analysis.TokenFilter that applies LatvianStemmer to stem Latvian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter LatvianStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Lv.LatvianStemFilterFactory.html",
    "title": "Class LatvianStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Lv.LatvianStemmer.html": {
    "href": "Lucene.Net.Analysis.Lv.LatvianStemmer.html",
    "title": "Class LatvianStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilter.html",
    "title": "Class ASCIIFoldingFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ASCIIFoldingFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.ASCIIFoldingFilterFactory.html",
    "title": "Class ASCIIFoldingFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.CapitalizationFilter.html",
    "title": "Class CapitalizationFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter CapitalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.CapitalizationFilterFactory.html",
    "title": "Class CapitalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.CodepointCountFilter.html",
    "title": "Class CodepointCountFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FilteringTokenFilter CodepointCountFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version Lucene.Net.Analysis.TokenStream in the Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.CodepointCountFilterFactory.html",
    "title": "Class CodepointCountFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.EmptyTokenStream.html",
    "title": "Class EmptyTokenStream | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class EmptyTokenStream An always exhausted token stream. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream EmptyTokenStream Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenStream.End() Lucene.Net.Analysis.TokenStream.Reset() Lucene.Net.Analysis.TokenStream.Dispose() TokenStream.Dispose(Boolean) Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.html",
    "title": "Namespace Lucene.Net.Analysis.Miscellaneous | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . LimitTokenCountFilter This Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most Lucene.Net.Analysis.TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most Lucene.Net.Analysis.TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter which filters out Lucene.Net.Analysis.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 Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilter.html",
    "title": "Class HyphenatedWordsFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter HyphenatedWordsFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource.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 Lucene.Net.Util.AttributeSource.AddAttribute<T>() and Lucene.Net.Util.AttributeSource.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 Lucene.Net.Analysis.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., Lucene.Net.Analysis.Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input Lucene.Net.Analysis.TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.HyphenatedWordsFilterFactory.html",
    "title": "Class HyphenatedWordsFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.KeepWordFilter.html",
    "title": "Class KeepWordFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class KeepWordFilter A Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FilteringTokenFilter KeepWordFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version Lucene.Net.Analysis.TokenStream in the Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version System.Boolean enablePositionIncrements Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.KeepWordFilterFactory.html",
    "title": "Class KeepWordFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilter.html",
    "title": "Class KeywordMarkerFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class KeywordMarkerFilter Marks terms as keywords via the KeywordAttribute . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter SetKeywordMarkerFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in the input stream Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source IsKeyword() Declaration protected abstract bool IsKeyword() Returns Type Description System.Boolean Implements System.IDisposable See Also KeywordAttribute"
  },
  "Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.KeywordMarkerFilterFactory.html",
    "title": "Class KeywordMarkerFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilter.html",
    "title": "Class KeywordRepeatFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter KeywordRepeatFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.KeywordRepeatFilterFactory.html",
    "title": "Class KeywordRepeatFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.LengthFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.LengthFilter.html",
    "title": "Class LengthFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FilteringTokenFilter LengthFilter Implements System.IDisposable Inherited Members FilteringTokenFilter.m_version FilteringTokenFilter.IncrementToken() FilteringTokenFilter.Reset() FilteringTokenFilter.EnablePositionIncrements FilteringTokenFilter.SetEnablePositionIncrements(Boolean) FilteringTokenFilter.End() Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version Lucene.Net.Analysis.TokenStream in the Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version System.Boolean enablePositionIncrements Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.LengthFilterFactory.html",
    "title": "Class LengthFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.LimitTokenCountAnalyzer.html",
    "title": "Class LimitTokenCountAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class LimitTokenCountAnalyzer This Lucene.Net.Analysis.Analyzer limits the number of tokens while indexing. It is a replacement for the maximum field length setting inside IndexWriter . Inheritance System.Object Lucene.Net.Analysis.Analyzer Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents components Returns Type Description Lucene.Net.Analysis.TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable See Also LimitTokenCountFilter"
  },
  "Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilter.html",
    "title": "Class LimitTokenCountFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class LimitTokenCountFilter This Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream once the limit has been reached, which can result in Reset() being called prior to IncrementToken() returning false . For most Lucene.Net.Analysis.TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter LimitTokenCountFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.LimitTokenCountFilterFactory.html",
    "title": "Class LimitTokenCountFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilter.html",
    "title": "Class LimitTokenPositionFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class LimitTokenPositionFilter This Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream once the limit has been exceeded, which can result in Reset() being called prior to IncrementToken() returning false . For most Lucene.Net.Analysis.TokenStream implementations this should be acceptable, and faster then consuming the full stream. If you are wrapping a Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter LimitTokenPositionFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.LimitTokenPositionFilterFactory.html",
    "title": "Class LimitTokenPositionFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.Lucene47WordDelimiterFilter.html",
    "title": "Class Lucene47WordDelimiterFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class Lucene47WordDelimiterFilter Old Broken version of WordDelimiterFilter Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter Lucene47WordDelimiterFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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 Lucene.Net.Analysis.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., Lucene.Net.Analysis.Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Remarks NOTE: The default implementation chains the call to the input Lucene.Net.Analysis.TokenStream , so be sure to call base.Reset() when overriding this method. Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.PatternAnalyzer.html",
    "title": "Class PatternAnalyzer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.PatternKeywordMarkerFilter.html",
    "title": "Class PatternKeywordMarkerFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter KeywordMarkerFilter PatternKeywordMarkerFilter Implements System.IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.PerFieldAnalyzerWrapper.html",
    "title": "Class PerFieldAnalyzerWrapper | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Analysis.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`2 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 Lucene.Net.Analysis.Analyzer defaultAnalyzer Any fields not specifically defined to use a different analyzer will use the one provided here. System.Collections.Generic.IDictionary < System.String , Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.PrefixAndSuffixAwareTokenFilter.html",
    "title": "Class PrefixAndSuffixAwareTokenFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream PrefixAndSuffixAwareTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream prefix Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenStream.Reset() | Improve this Doc View Source UpdateInputToken(Token, Token) Declaration public virtual Token UpdateInputToken(Token inputToken, Token lastPrefixToken) Parameters Type Name Description Lucene.Net.Analysis.Token inputToken Lucene.Net.Analysis.Token lastPrefixToken Returns Type Description Lucene.Net.Analysis.Token | Improve this Doc View Source UpdateSuffixToken(Token, Token) Declaration public virtual Token UpdateSuffixToken(Token suffixToken, Token lastInputToken) Parameters Type Name Description Lucene.Net.Analysis.Token suffixToken Lucene.Net.Analysis.Token lastInputToken Returns Type Description Lucene.Net.Analysis.Token Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.PrefixAwareTokenFilter.html",
    "title": "Class PrefixAwareTokenFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream PrefixAwareTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream prefix Lucene.Net.Analysis.TokenStream suffix Properties | Improve this Doc View Source Prefix Declaration public virtual TokenStream Prefix { get; set; } Property Value Type Description Lucene.Net.Analysis.TokenStream | Improve this Doc View Source Suffix Declaration public virtual TokenStream Suffix { get; set; } Property Value Type Description Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.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 Lucene.Net.Analysis.Token suffixToken a token from the suffix stream Lucene.Net.Analysis.Token lastPrefixToken the last token from the prefix stream Returns Type Description Lucene.Net.Analysis.Token consumer token Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilter.html",
    "title": "Class RemoveDuplicatesTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class RemoveDuplicatesTokenFilter A Lucene.Net.Analysis.TokenFilter which filters out Lucene.Net.Analysis.Token s at the same position and Term text as the previous token in the stream. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter RemoveDuplicatesTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource.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 Lucene.Net.Util.AttributeSource.AddAttribute<T>() and Lucene.Net.Util.AttributeSource.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 Lucene.Net.Analysis.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., Lucene.Net.Analysis.Tokenizer will throw System.InvalidOperationException on further usage). Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.RemoveDuplicatesTokenFilterFactory.html",
    "title": "Class RemoveDuplicatesTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilter.html",
    "title": "Class ScandinavianFoldingFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ScandinavianFoldingFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also ScandinavianNormalizationFilter"
  },
  "Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.ScandinavianFoldingFilterFactory.html",
    "title": "Class ScandinavianFoldingFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilter.html",
    "title": "Class ScandinavianNormalizationFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ScandinavianNormalizationFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also ScandinavianFoldingFilter"
  },
  "Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.ScandinavianNormalizationFilterFactory.html",
    "title": "Class ScandinavianNormalizationFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.SetKeywordMarkerFilter.html",
    "title": "Class SetKeywordMarkerFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter KeywordMarkerFilter SetKeywordMarkerFilter Implements System.IDisposable Inherited Members KeywordMarkerFilter.IncrementToken() Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.SingleTokenTokenStream.html",
    "title": "Class SingleTokenTokenStream | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SingleTokenTokenStream A Lucene.Net.Analysis.TokenStream containing a single token. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream SingleTokenTokenStream Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenStream.End() Lucene.Net.Analysis.TokenStream.Dispose() TokenStream.Dispose(Boolean) Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.Token token Methods | Improve this Doc View Source GetToken() Declaration public Token GetToken() Returns Type Description Lucene.Net.Analysis.Token | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenStream.Reset() | Improve this Doc View Source SetToken(Token) Declaration public void SetToken(Token token) Parameters Type Name Description Lucene.Net.Analysis.Token token Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.Builder.html",
    "title": "Class StemmerOverrideFilter.Builder | Apache Lucene.NET 4.8.0-beta00011 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;"
  },
  "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.html",
    "title": "Class StemmerOverrideFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class StemmerOverrideFilter Provides the ability to override any KeywordAttribute aware stemmer with custom dictionary-based stemming. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter StemmerOverrideFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input StemmerOverrideFilter.StemmerOverrideMap stemmerOverrideMap Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilter.StemmerOverrideMap.html",
    "title": "Class StemmerOverrideFilter.StemmerOverrideMap | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.Fst.FST < Lucene.Net.Util.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 Lucene.Net.Util.Fst.FST.Arc < Lucene.Net.Util.BytesRef > scratchArc Lucene.Net.Util.Fst.FST.BytesReader fstReader Returns Type Description Lucene.Net.Util.BytesRef | Improve this Doc View Source GetBytesReader() Returns a Lucene.Net.Util.Fst.FST.BytesReader to pass to the Get(Char[], Int32, FST.Arc<BytesRef>, FST.BytesReader) method. Declaration public FST.BytesReader GetBytesReader() Returns Type Description Lucene.Net.Util.Fst.FST.BytesReader"
  },
  "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.StemmerOverrideFilterFactory.html",
    "title": "Class StemmerOverrideFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.TrimFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.TrimFilter.html",
    "title": "Class TrimFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter TrimFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version the Lucene match version Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.TrimFilterFactory.html",
    "title": "Class TrimFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also TrimFilter"
  },
  "Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilter.html",
    "title": "Class TruncateTokenFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter TruncateTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input System.Int32 length Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.TruncateTokenFilterFactory.html",
    "title": "Class TruncateTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilter.html",
    "title": "Class WordDelimiterFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter WordDelimiterFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion lucene compatibility version Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion lucene compatibility version Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.WordDelimiterFilterFactory.html",
    "title": "Class WordDelimiterFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.WordDelimiterFlags.html",
    "title": "Enum WordDelimiterFlags | Apache Lucene.NET 4.8.0-beta00011 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\""
  },
  "Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html": {
    "href": "Lucene.Net.Analysis.Miscellaneous.WordDelimiterIterator.html",
    "title": "Class WordDelimiterIterator | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html": {
    "href": "Lucene.Net.Analysis.NGram.EdgeNGramFilterFactory.html",
    "title": "Class EdgeNGramFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html": {
    "href": "Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.html",
    "title": "Class EdgeNGramTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class EdgeNGramTokenFilter Tokenizes the given token into n-grams of given size(s). This Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter EdgeNGramTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.LuceneVersion Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.LuceneVersion Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.LuceneVersion Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html": {
    "href": "Lucene.Net.Analysis.NGram.EdgeNGramTokenFilter.Side.html",
    "title": "Enum EdgeNGramTokenFilter.Side | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html": {
    "href": "Lucene.Net.Analysis.NGram.EdgeNGramTokenizer.html",
    "title": "Class EdgeNGramTokenizer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class EdgeNGramTokenizer Tokenizes the input from an edge into n-grams of given size(s). This Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.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() Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.LuceneVersion Lucene.Net.Util.AttributeSource.AttributeFactory factory Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.NGram.EdgeNGramTokenizerFactory.html",
    "title": "Class EdgeNGramTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.NGram.html": {
    "href": "Lucene.Net.Analysis.NGram.html",
    "title": "Namespace Lucene.Net.Analysis.NGram | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream s that will cause highlighting bugs. If you were using this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html": {
    "href": "Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.html",
    "title": "Class Lucene43EdgeNGramTokenizer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class Lucene43EdgeNGramTokenizer Old version of EdgeNGramTokenizer which doesn't handle correctly supplementary characters. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer Lucene43EdgeNGramTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.LuceneVersion Lucene.Net.Util.AttributeSource.AttributeFactory factory Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.LuceneVersion Lucene.Net.Util.AttributeSource.AttributeFactory factory Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.LuceneVersion Lucene.Net.Util.AttributeSource.AttributeFactory factory Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version - See Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html": {
    "href": "Lucene.Net.Analysis.NGram.Lucene43EdgeNGramTokenizer.Side.html",
    "title": "Enum Lucene43EdgeNGramTokenizer.Side | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html": {
    "href": "Lucene.Net.Analysis.NGram.Lucene43NGramTokenizer.html",
    "title": "Class Lucene43NGramTokenizer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class Lucene43NGramTokenizer Old broken version of NGramTokenizer . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer Lucene43NGramTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory factory Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.NGram.NGramFilterFactory.html": {
    "href": "Lucene.Net.Analysis.NGram.NGramFilterFactory.html",
    "title": "Class NGramFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.NGram.NGramTokenFilter.html": {
    "href": "Lucene.Net.Analysis.NGram.NGramTokenFilter.html",
    "title": "Class NGramTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class NGramTokenFilter Tokenizes the input into n-grams of the given size(s). You must specify the required Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream s that will cause highlighting bugs. If you were using this Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter NGramTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version Lucene version to enable correct position increments. See NGramTokenFilter for details. Lucene.Net.Analysis.TokenStream input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.NGram.NGramTokenizer.html": {
    "href": "Lucene.Net.Analysis.NGram.NGramTokenizer.html",
    "title": "Class NGramTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer NGramTokenizer EdgeNGramTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the lucene compatibility version Lucene.Net.Util.AttributeSource.AttributeFactory factory Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.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 Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.NGram.NGramTokenizerFactory.html",
    "title": "Class NGramTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream of n-grams from the given System.IO.TextReader and Lucene.Net.Util.AttributeSource.AttributeFactory . Declaration public override Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Nl.DutchAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Nl.DutchAnalyzer.html",
    "title": "Class DutchAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class DutchAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion | Improve this Doc View Source DutchAnalyzer(LuceneVersion, CharArraySet) Declaration public DutchAnalyzer(LuceneVersion matchVersion, CharArraySet stopwords) Parameters Type Name Description Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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) Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Nl.DutchStemFilter.html": {
    "href": "Lucene.Net.Analysis.Nl.DutchStemFilter.html",
    "title": "Class DutchStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class DutchStemFilter A Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter DutchStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Input Lucene.Net.Analysis.TokenStream | Improve this Doc View Source DutchStemFilter(TokenStream, IDictionary<String, String>) Declaration public DutchStemFilter(TokenStream in, IDictionary<string, string> stemdictionary) Parameters Type Name Description Lucene.Net.Analysis.TokenStream in Input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also KeywordMarkerFilter"
  },
  "Lucene.Net.Analysis.Nl.DutchStemmer.html": {
    "href": "Lucene.Net.Analysis.Nl.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Nl.html": {
    "href": "Lucene.Net.Analysis.Nl.html",
    "title": "Namespace Lucene.Net.Analysis.Nl | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer . DutchStemFilter A Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . DutchStemmer A stemmer for Dutch words. The algorithm is an implementation of the dutch stemming algorithm in Martin Porter's snowball project."
  },
  "Lucene.Net.Analysis.No.html": {
    "href": "Lucene.Net.Analysis.No.html",
    "title": "Namespace Lucene.Net.Analysis.No | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Norwegian. NorwegianLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.No.NorwegianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianAnalyzer.html",
    "title": "Class NorwegianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class NorwegianAnalyzer Lucene.Net.Analysis.Analyzer for Norwegian. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.No.NorwegianLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianLightStemFilter.html",
    "title": "Class NorwegianLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class NorwegianLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies NorwegianLightStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter NorwegianLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input the source Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream input the source Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianLightStemFilterFactory.html",
    "title": "Class NorwegianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.No.NorwegianLightStemmer.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianLightStemmer.html",
    "title": "Class NorwegianLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianMinimalStemFilter.html",
    "title": "Class NorwegianMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class NorwegianMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies NorwegianMinimalStemmer to stem Norwegian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter NorwegianMinimalStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream input the source Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianMinimalStemFilterFactory.html",
    "title": "Class NorwegianMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianMinimalStemmer.html",
    "title": "Class NorwegianMinimalStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.No.NorwegianStandard.html": {
    "href": "Lucene.Net.Analysis.No.NorwegianStandard.html",
    "title": "Enum NorwegianStandard | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Path.html": {
    "href": "Lucene.Net.Analysis.Path.html",
    "title": "Namespace Lucene.Net.Analysis.Path | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html": {
    "href": "Lucene.Net.Analysis.Path.PathHierarchyTokenizer.html",
    "title": "Class PathHierarchyTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer PathHierarchyTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Path.PathHierarchyTokenizerFactory.html",
    "title": "Class PathHierarchyTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html": {
    "href": "Lucene.Net.Analysis.Path.ReversePathHierarchyTokenizer.html",
    "title": "Class ReversePathHierarchyTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer ReversePathHierarchyTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Pattern.html": {
    "href": "Lucene.Net.Analysis.Pattern.html",
    "title": "Namespace Lucene.Net.Analysis.Pattern | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream , this Lucene.Net.Analysis.TokenFilter may produce Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternCaptureGroupFilterFactory.html",
    "title": "Class PatternCaptureGroupFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternCaptureGroupTokenFilter"
  },
  "Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternCaptureGroupTokenFilter.html",
    "title": "Class PatternCaptureGroupTokenFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PatternCaptureGroupTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input the input Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternReplaceCharFilter.html",
    "title": "Class PatternReplaceCharFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PatternReplaceCharFilter Lucene.Net.Analysis.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 Lucene.Net.Analysis.CharFilter BaseCharFilter PatternReplaceCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) Lucene.Net.Analysis.CharFilter.m_input CharFilter.Dispose(Boolean) CharFilter.CorrectOffset(Int32) CharFilter.Skip(Int32) Lucene.Net.Analysis.CharFilter.Reset() Lucene.Net.Analysis.CharFilter.IsReady Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternReplaceCharFilterFactory.html",
    "title": "Class PatternReplaceCharFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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)"
  },
  "Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternReplaceFilter.html",
    "title": "Class PatternReplaceFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream , this Lucene.Net.Analysis.TokenFilter may produce Lucene.Net.Analysis.Token s whose text is the empty string. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PatternReplaceFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in the Lucene.Net.Analysis.TokenStream to process System.Text.RegularExpressions.Regex pattern the pattern (a System.Text.RegularExpressions.Regex object) to apply to each Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also System.Text.RegularExpressions.Regex"
  },
  "Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternReplaceFilterFactory.html",
    "title": "Class PatternReplaceFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PatternReplaceFilter"
  },
  "Lucene.Net.Analysis.Pattern.PatternTokenizer.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternTokenizer.html",
    "title": "Class PatternTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Tokenizer does not output tokens that are of zero length. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer PatternTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable See Also System.Text.RegularExpressions.Regex"
  },
  "Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Pattern.PatternTokenizerFactory.html",
    "title": "Class PatternTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader) See Also PatternTokenizer"
  },
  "Lucene.Net.Analysis.Payloads.AbstractEncoder.html": {
    "href": "Lucene.Net.Analysis.Payloads.AbstractEncoder.html",
    "title": "Class AbstractEncoder | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.BytesRef Implements IPayloadEncoder"
  },
  "Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilter.html",
    "title": "Class DelimitedPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Tokenizer doesn't split on the delimiter, or this won't work Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter DelimitedPayloadTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable See Also IPayloadEncoder"
  },
  "Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Payloads.DelimitedPayloadTokenFilterFactory.html",
    "title": "Class DelimitedPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Payloads.html": {
    "href": "Lucene.Net.Analysis.Payloads.html",
    "title": "Namespace Lucene.Net.Analysis.Payloads | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.BytesRef . NOTE: This interface is subject to change"
  },
  "Lucene.Net.Analysis.Payloads.IdentityEncoder.html": {
    "href": "Lucene.Net.Analysis.Payloads.IdentityEncoder.html",
    "title": "Class IdentityEncoder | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "Lucene.Net.Analysis.Payloads.IntegerEncoder.html": {
    "href": "Lucene.Net.Analysis.Payloads.IntegerEncoder.html",
    "title": "Class IntegerEncoder | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class IntegerEncoder Encode a character array System.Int32 as a Lucene.Net.Util.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 Lucene.Net.Util.BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder"
  },
  "Lucene.Net.Analysis.Payloads.IPayloadEncoder.html": {
    "href": "Lucene.Net.Analysis.Payloads.IPayloadEncoder.html",
    "title": "Interface IPayloadEncoder | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Interface IPayloadEncoder Mainly for use with the DelimitedPayloadTokenFilter , converts char buffers to Lucene.Net.Util.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 Lucene.Net.Util.BytesRef | Improve this Doc View Source Encode(Char[], Int32, Int32) Convert a char array to a Lucene.Net.Util.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 Lucene.Net.Util.BytesRef encoded Lucene.Net.Util.BytesRef"
  },
  "Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilter.html",
    "title": "Class NumericPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class NumericPayloadTokenFilter Assigns a payload to a token based on the Type Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter NumericPayloadTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Payloads.NumericPayloadTokenFilterFactory.html",
    "title": "Class NumericPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Payloads.PayloadHelper.html": {
    "href": "Lucene.Net.Analysis.Payloads.PayloadHelper.html",
    "title": "Class PayloadHelper | Apache Lucene.NET 4.8.0-beta00011 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 []"
  },
  "Lucene.Net.Analysis.Payloads.SingleEncoder.html": {
    "href": "Lucene.Net.Analysis.Payloads.SingleEncoder.html",
    "title": "Class SingleEncoder | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SingleEncoder Encode a character array System.Single as a Lucene.Net.Util.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 Lucene.Net.Util.BytesRef Overrides AbstractEncoder.Encode(Char[], Int32, Int32) Implements IPayloadEncoder See Also EncodeSingle(Single, Byte[], Int32)"
  },
  "Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilter.html",
    "title": "Class TokenOffsetPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TokenOffsetPayloadTokenFilter Adds the StartOffset and EndOffset First 4 bytes are the start Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter TokenOffsetPayloadTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Payloads.TokenOffsetPayloadTokenFilterFactory.html",
    "title": "Class TokenOffsetPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilter.html",
    "title": "Class TypeAsPayloadTokenFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TypeAsPayloadTokenFilter Makes the Type a payload. Encodes the type using System.Text.Encoding.UTF8.GetBytes(string) Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter TypeAsPayloadTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Payloads.TypeAsPayloadTokenFilterFactory.html",
    "title": "Class TypeAsPayloadTokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Position.html": {
    "href": "Lucene.Net.Analysis.Position.html",
    "title": "Namespace Lucene.Net.Analysis.Position | Apache Lucene.NET 4.8.0-beta00011 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>"
  },
  "Lucene.Net.Analysis.Position.PositionFilter.html": {
    "href": "Lucene.Net.Analysis.Position.PositionFilter.html",
    "title": "Class PositionFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PositionFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Position.PositionFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Position.PositionFilterFactory.html",
    "title": "Class PositionFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) See Also PositionFilter"
  },
  "Lucene.Net.Analysis.Pt.html": {
    "href": "Lucene.Net.Analysis.Pt.html",
    "title": "Namespace Lucene.Net.Analysis.Pt | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Portuguese. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. PortugueseLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseAnalyzer.html",
    "title": "Class PortugueseAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PortugueseAnalyzer Lucene.Net.Analysis.Analyzer for Portuguese. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating PortugueseAnalyzer : As of 3.6, PortugueseLightStemFilter is used for less aggressive stemming. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseLightStemFilter.html",
    "title": "Class PortugueseLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PortugueseLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies PortugueseLightStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PortugueseLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseLightStemFilterFactory.html",
    "title": "Class PortugueseLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseLightStemmer.html",
    "title": "Class PortugueseLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilter.html",
    "title": "Class PortugueseMinimalStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PortugueseMinimalStemFilter A Lucene.Net.Analysis.TokenFilter that applies PortugueseMinimalStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PortugueseMinimalStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseMinimalStemFilterFactory.html",
    "title": "Class PortugueseMinimalStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseMinimalStemmer.html",
    "title": "Class PortugueseMinimalStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Pt.PortugueseStemFilter.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseStemFilter.html",
    "title": "Class PortugueseStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class PortugueseStemFilter A Lucene.Net.Analysis.TokenFilter that applies PortugueseStemmer to stem Portuguese words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter PortugueseStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseStemFilterFactory.html",
    "title": "Class PortugueseStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Pt.PortugueseStemmer.html": {
    "href": "Lucene.Net.Analysis.Pt.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Pt.RSLPStemmerBase.html": {
    "href": "Lucene.Net.Analysis.Pt.RSLPStemmerBase.html",
    "title": "Class RSLPStemmerBase | Apache Lucene.NET 4.8.0-beta00011 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."
  },
  "Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html": {
    "href": "Lucene.Net.Analysis.Pt.RSLPStemmerBase.Rule.html",
    "title": "Class RSLPStemmerBase.Rule | Apache Lucene.NET 4.8.0-beta00011 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."
  },
  "Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html": {
    "href": "Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSetExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSetExceptions | Apache Lucene.NET 4.8.0-beta00011 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)"
  },
  "Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html": {
    "href": "Lucene.Net.Analysis.Pt.RSLPStemmerBase.RuleWithSuffixExceptions.html",
    "title": "Class RSLPStemmerBase.RuleWithSuffixExceptions | Apache Lucene.NET 4.8.0-beta00011 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)"
  },
  "Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html": {
    "href": "Lucene.Net.Analysis.Pt.RSLPStemmerBase.Step.html",
    "title": "Class RSLPStemmerBase.Step | Apache Lucene.NET 4.8.0-beta00011 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."
  },
  "Lucene.Net.Analysis.Query.html": {
    "href": "Lucene.Net.Analysis.Query.html",
    "title": "Namespace Lucene.Net.Analysis.Query | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Query.QueryAutoStopWordAnalyzer.html",
    "title": "Class QueryAutoStopWordAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class QueryAutoStopWordAnalyzer An Lucene.Net.Analysis.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 Lucene.Net.Analysis.Analyzer Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion Version to be used in StopFilter Lucene.Net.Analysis.Analyzer delegate Lucene.Net.Analysis.Analyzer whose Lucene.Net.Analysis.TokenStream will be filtered Lucene.Net.Index.IndexReader indexReader Lucene.Net.Index.IndexReader to identify the stopwords from Exceptions Type Condition System.IO.IOException Can be thrown while reading from the Lucene.Net.Index.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 Lucene.Net.Util.LuceneVersion matchVersion Version to be used in StopFilter Lucene.Net.Analysis.Analyzer delegate Analyzer whose TokenStream will be filtered Lucene.Net.Index.IndexReader indexReader Lucene.Net.Index.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 Lucene.Net.Index.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 Lucene.Net.Util.LuceneVersion matchVersion Version to be used in StopFilter Lucene.Net.Analysis.Analyzer delegate Lucene.Net.Analysis.Analyzer whose Lucene.Net.Analysis.TokenStream will be filtered Lucene.Net.Index.IndexReader indexReader Lucene.Net.Index.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 Lucene.Net.Index.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 Lucene.Net.Util.LuceneVersion matchVersion Version to be used in StopFilter Lucene.Net.Analysis.Analyzer delegate Lucene.Net.Analysis.Analyzer whose Lucene.Net.Analysis.TokenStream will be filtered Lucene.Net.Index.IndexReader indexReader Lucene.Net.Index.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 Lucene.Net.Index.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 Lucene.Net.Util.LuceneVersion matchVersion Version to be used in StopFilter Lucene.Net.Analysis.Analyzer delegate Lucene.Net.Analysis.Analyzer whose Lucene.Net.Analysis.TokenStream will be filtered Lucene.Net.Index.IndexReader indexReader Lucene.Net.Index.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 Lucene.Net.Index.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents components Returns Type Description Lucene.Net.Analysis.TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Reverse.html": {
    "href": "Lucene.Net.Analysis.Reverse.html",
    "title": "Namespace Lucene.Net.Analysis.Reverse | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Reverse.ReverseStringFilter.html": {
    "href": "Lucene.Net.Analysis.Reverse.ReverseStringFilter.html",
    "title": "Class ReverseStringFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ReverseStringFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream . The reversed tokens will not be marked. Declaration public ReverseStringFilter(LuceneVersion matchVersion, TokenStream in) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion lucene compatibility version Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion lucene compatibility version Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Reverse.ReverseStringFilterFactory.html",
    "title": "Class ReverseStringFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Ro.html": {
    "href": "Lucene.Net.Analysis.Ro.html",
    "title": "Namespace Lucene.Net.Analysis.Ro | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Romanian."
  },
  "Lucene.Net.Analysis.Ro.RomanianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Ro.RomanianAnalyzer.html",
    "title": "Class RomanianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class RomanianAnalyzer Lucene.Net.Analysis.Analyzer for Romanian. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ru.html": {
    "href": "Lucene.Net.Analysis.Ru.html",
    "title": "Namespace Lucene.Net.Analysis.Ru | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required Lucene.Net.Util.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 Lucene.Net.Analysis.TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Ru.RussianAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Ru.RussianAnalyzer.html",
    "title": "Class RussianAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class RussianAnalyzer Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html": {
    "href": "Lucene.Net.Analysis.Ru.RussianLetterTokenizer.html",
    "title": "Class RussianLetterTokenizer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class RussianLetterTokenizer A RussianLetterTokenizer is a Lucene.Net.Analysis.Tokenizer that extends LetterTokenizer by also allowing the basic Latin digits 0-9. You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CharTokenizer RussianLetterTokenizer Implements System.IDisposable Inherited Members CharTokenizer.Normalize(Int32) CharTokenizer.IncrementToken() CharTokenizer.End() CharTokenizer.Reset() Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory . Declaration public RussianLetterTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader in) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion lucene compatibility version Lucene.Net.Util.AttributeSource.AttributeFactory factory the attribute factory to use for this Lucene.Net.Analysis.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Ru.RussianLetterTokenizerFactory.html",
    "title": "Class RussianLetterTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Ru.RussianLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.Ru.RussianLightStemFilter.html",
    "title": "Class RussianLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class RussianLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies RussianLightStemmer to stem Russian words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter RussianLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Ru.RussianLightStemFilterFactory.html",
    "title": "Class RussianLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Ru.RussianLightStemmer.html": {
    "href": "Lucene.Net.Analysis.Ru.RussianLightStemmer.html",
    "title": "Class RussianLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Shingle.html": {
    "href": "Lucene.Net.Analysis.Shingle.html",
    "title": "Namespace Lucene.Net.Analysis.Shingle | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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>"
  },
  "Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html": {
    "href": "Lucene.Net.Analysis.Shingle.ShingleAnalyzerWrapper.html",
    "title": "Class ShingleAnalyzerWrapper | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ShingleAnalyzerWrapper A ShingleAnalyzerWrapper wraps a ShingleFilter around another Lucene.Net.Analysis.Analyzer . A shingle is another name for a token based n-gram. Inheritance System.Object Lucene.Net.Analysis.Analyzer Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Analysis.Analyzer defaultAnalyzer | Improve this Doc View Source ShingleAnalyzerWrapper(Analyzer, Int32) Declaration public ShingleAnalyzerWrapper(Analyzer defaultAnalyzer, int maxShingleSize) Parameters Type Name Description Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.Analyzer delegate Lucene.Net.Analysis.Analyzer whose Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents components Returns Type Description Lucene.Net.Analysis.TokenStreamComponents Overrides AnalyzerWrapper.WrapComponents(String, TokenStreamComponents) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Shingle.ShingleFilter.html": {
    "href": "Lucene.Net.Analysis.Shingle.ShingleFilter.html",
    "title": "Class ShingleFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ShingleFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input input stream | Improve this Doc View Source ShingleFilter(TokenStream, Int32) Constructs a ShingleFilter with the specified shingle size from the Lucene.Net.Analysis.TokenStream input Declaration public ShingleFilter(TokenStream input, int maxShingleSize) Parameters Type Name Description Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream input Declaration public ShingleFilter(TokenStream input, int minShingleSize, int maxShingleSize) Parameters Type Name Description Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Shingle.ShingleFilterFactory.html",
    "title": "Class ShingleFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html": {
    "href": "Lucene.Net.Analysis.Sinks.DateRecognizerSinkFilter.html",
    "title": "Class DateRecognizerSinkFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute Methods | Improve this Doc View Source Accept(AttributeSource) Declaration public override bool Accept(AttributeSource source) Parameters Type Name Description Lucene.Net.Util.AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "Lucene.Net.Analysis.Sinks.html": {
    "href": "Lucene.Net.Analysis.Sinks.html",
    "title": "Namespace Lucene.Net.Analysis.Sinks | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource states to store in the sink. TeeSinkTokenFilter.SinkTokenStream Lucene.Net.Analysis.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."
  },
  "Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.html",
    "title": "Class TeeSinkTokenFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter TeeSinkTokenFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html": {
    "href": "Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkFilter.html",
    "title": "Class TeeSinkTokenFilter.SinkFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkFilter A filter that decides which Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource shall be stored in the sink. Declaration public abstract bool Accept(AttributeSource source) Parameters Type Name Description Lucene.Net.Util.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()"
  },
  "Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html": {
    "href": "Lucene.Net.Analysis.Sinks.TeeSinkTokenFilter.SinkTokenStream.html",
    "title": "Class TeeSinkTokenFilter.SinkTokenStream | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TeeSinkTokenFilter.SinkTokenStream Lucene.Net.Analysis.TokenStream output from a tee with optional filtering. Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream TeeSinkTokenFilter.SinkTokenStream Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenStream.Dispose() TokenStream.Dispose(Boolean) Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override sealed void Reset() Overrides Lucene.Net.Analysis.TokenStream.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html": {
    "href": "Lucene.Net.Analysis.Sinks.TokenRangeSinkFilter.html",
    "title": "Class TokenRangeSinkFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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()"
  },
  "Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html": {
    "href": "Lucene.Net.Analysis.Sinks.TokenTypeSinkFilter.html",
    "title": "Class TokenTypeSinkFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource source Returns Type Description System.Boolean Overrides TeeSinkTokenFilter.SinkFilter.Accept(AttributeSource)"
  },
  "Lucene.Net.Analysis.Snowball.html": {
    "href": "Lucene.Net.Analysis.Snowball.html",
    "title": "Namespace Lucene.Net.Analysis.Snowball | Apache Lucene.NET 4.8.0-beta00011 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. --> <xref:Lucene.Net.Analysis.TokenFilter> and <xref:Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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>"
  },
  "Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Snowball.SnowballAnalyzer.html",
    "title": "Class SnowballAnalyzer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.LuceneVersion dependent settings as StandardAnalyzer , with the following addition: As of 3.1, uses TurkishLowerCaseFilter for Turkish language. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Snowball.SnowballFilter.html": {
    "href": "Lucene.Net.Analysis.Snowball.SnowballFilter.html",
    "title": "Class SnowballFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream . Note: For including the original term as well as the stemmed version, see KeywordRepeatFilterFactory Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter SnowballFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.Token , after being stemmed Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Snowball.SnowballPorterFilterFactory.html",
    "title": "Class SnowballPorterFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Standard.ClassicAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Standard.ClassicAnalyzer.html",
    "title": "Class ClassicAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ClassicAnalyzer Filters ClassicTokenizer with ClassicFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required Lucene.Net.Util.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, Lucene.Net.Analysis.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 Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.ClassicFilter.html": {
    "href": "Lucene.Net.Analysis.Standard.ClassicFilter.html",
    "title": "Class ClassicFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ClassicFilter Normalizes tokens extracted with ClassicTokenizer . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ClassicFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.ClassicFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Standard.ClassicFilterFactory.html",
    "title": "Class ClassicFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Standard.ClassicTokenizer.html": {
    "href": "Lucene.Net.Analysis.Standard.ClassicTokenizer.html",
    "title": "Class ClassicTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer ClassicTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory Declaration public ClassicTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Standard.ClassicTokenizerFactory.html",
    "title": "Class ClassicTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Standard.html": {
    "href": "Lucene.Net.Analysis.Standard.html",
    "title": "Namespace Lucene.Net.Analysis.Standard | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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, Lucene.Net.Analysis.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 Lucene.Net.Util.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, Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html": {
    "href": "Lucene.Net.Analysis.Standard.IStandardTokenizerInterface.html",
    "title": "Interface IStandardTokenizerInterface | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.ICharTermAttribute Declaration void GetText(ICharTermAttribute t) Parameters Type Name Description Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.StandardAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Standard.StandardAnalyzer.html",
    "title": "Class StandardAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class StandardAnalyzer Filters StandardTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required Lucene.Net.Util.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, Lucene.Net.Analysis.Token s incorrectly identified as acronyms are corrected (see LUCENE-1068 ) Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.StandardFilter.html": {
    "href": "Lucene.Net.Analysis.Standard.StandardFilter.html",
    "title": "Class StandardFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class StandardFilter Normalizes tokens extracted with StandardTokenizer . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter StandardFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Analysis.TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source IncrementTokenClassic() Declaration public bool IncrementTokenClassic() Returns Type Description System.Boolean Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.StandardFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Standard.StandardFilterFactory.html",
    "title": "Class StandardFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Standard.StandardTokenizer.html": {
    "href": "Lucene.Net.Analysis.Standard.StandardTokenizer.html",
    "title": "Class StandardTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer StandardTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory Declaration public StandardTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Standard.StandardTokenizerFactory.html",
    "title": "Class StandardTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html": {
    "href": "Lucene.Net.Analysis.Standard.StandardTokenizerImpl.html",
    "title": "Class StandardTokenizerImpl | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html": {
    "href": "Lucene.Net.Analysis.Standard.StandardTokenizerInterface.html",
    "title": "Class StandardTokenizerInterface | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Standard.Std31.html": {
    "href": "Lucene.Net.Analysis.Standard.Std31.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std31 | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html": {
    "href": "Lucene.Net.Analysis.Standard.Std31.StandardTokenizerImpl31.html",
    "title": "Class StandardTokenizerImpl31 | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html": {
    "href": "Lucene.Net.Analysis.Standard.Std31.UAX29URLEmailTokenizerImpl31.html",
    "title": "Class UAX29URLEmailTokenizerImpl31 | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.Std34.html": {
    "href": "Lucene.Net.Analysis.Standard.Std34.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std34 | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html": {
    "href": "Lucene.Net.Analysis.Standard.Std34.StandardTokenizerImpl34.html",
    "title": "Class StandardTokenizerImpl34 | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html": {
    "href": "Lucene.Net.Analysis.Standard.Std34.UAX29URLEmailTokenizerImpl34.html",
    "title": "Class UAX29URLEmailTokenizerImpl34 | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.Std36.html": {
    "href": "Lucene.Net.Analysis.Standard.Std36.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std36 | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html": {
    "href": "Lucene.Net.Analysis.Standard.Std36.UAX29URLEmailTokenizerImpl36.html",
    "title": "Class UAX29URLEmailTokenizerImpl36 | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.Std40.html": {
    "href": "Lucene.Net.Analysis.Standard.Std40.html",
    "title": "Namespace Lucene.Net.Analysis.Standard.Std40 | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html": {
    "href": "Lucene.Net.Analysis.Standard.Std40.StandardTokenizerImpl40.html",
    "title": "Class StandardTokenizerImpl40 | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html": {
    "href": "Lucene.Net.Analysis.Standard.Std40.UAX29URLEmailTokenizerImpl40.html",
    "title": "Class UAX29URLEmailTokenizerImpl40 | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Standard.UAX29URLEmailAnalyzer.html",
    "title": "Class UAX29URLEmailAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class UAX29URLEmailAnalyzer Filters UAX29URLEmailTokenizer with StandardFilter , LowerCaseFilter and StopFilter , using a list of English stop words. You must specify the required Lucene.Net.Util.LuceneVersion compatibility when creating UAX29URLEmailAnalyzer Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStreamComponents Overrides Analyzer.CreateComponents(String, TextReader) Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html": {
    "href": "Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizer.html",
    "title": "Class UAX29URLEmailTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer UAX29URLEmailTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory Declaration public UAX29URLEmailTokenizer(LuceneVersion matchVersion, AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerFactory.html",
    "title": "Class UAX29URLEmailTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html": {
    "href": "Lucene.Net.Analysis.Standard.UAX29URLEmailTokenizerImpl.html",
    "title": "Class UAX29URLEmailTokenizerImpl | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenAttributes.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"
  },
  "Lucene.Net.Analysis.Sv.html": {
    "href": "Lucene.Net.Analysis.Sv.html",
    "title": "Namespace Lucene.Net.Analysis.Sv | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.Analyzer for Swedish. SwedishLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Sv.SwedishAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Sv.SwedishAnalyzer.html",
    "title": "Class SwedishAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SwedishAnalyzer Lucene.Net.Analysis.Analyzer for Swedish. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html": {
    "href": "Lucene.Net.Analysis.Sv.SwedishLightStemFilter.html",
    "title": "Class SwedishLightStemFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class SwedishLightStemFilter A Lucene.Net.Analysis.TokenFilter that applies SwedishLightStemmer to stem Swedish words. To prevent terms from being stemmed use an instance of SetKeywordMarkerFilter or a custom Lucene.Net.Analysis.TokenFilter that sets the KeywordAttribute before this Lucene.Net.Analysis.TokenStream . Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter SwedishLightStemFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input Methods | Improve this Doc View Source IncrementToken() Declaration public override bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Sv.SwedishLightStemFilterFactory.html",
    "title": "Class SwedishLightStemFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Sv.SwedishLightStemmer.html": {
    "href": "Lucene.Net.Analysis.Sv.SwedishLightStemmer.html",
    "title": "Class SwedishLightStemmer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Synonym.html": {
    "href": "Lucene.Net.Analysis.Synonym.html",
    "title": "Namespace Lucene.Net.Analysis.Synonym | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Synonym.SolrSynonymParser.html": {
    "href": "Lucene.Net.Analysis.Synonym.SolrSynonymParser.html",
    "title": "Class SolrSynonymParser | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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)"
  },
  "Lucene.Net.Analysis.Synonym.SynonymFilter.html": {
    "href": "Lucene.Net.Analysis.Synonym.SynonymFilter.html",
    "title": "Class SynonymFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter SynonymFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Synonym.SynonymFilterFactory.html",
    "title": "Class SynonymFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html": {
    "href": "Lucene.Net.Analysis.Synonym.SynonymMap.Builder.html",
    "title": "Class SynonymMap.Builder | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.CharsRef input input phrase Lucene.Net.Util.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 Lucene.Net.Util.CharsRef reuse Returns Type Description Lucene.Net.Util.CharsRef"
  },
  "Lucene.Net.Analysis.Synonym.SynonymMap.html": {
    "href": "Lucene.Net.Analysis.Synonym.SynonymMap.html",
    "title": "Class SynonymMap | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.Fst.FST < Lucene.Net.Util.BytesRef > fst Lucene.Net.Util.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 Lucene.Net.Util.Fst.FST < Lucene.Net.Util.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 Lucene.Net.Util.BytesRefHash"
  },
  "Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html": {
    "href": "Lucene.Net.Analysis.Synonym.SynonymMap.Parser.html",
    "title": "Class SynonymMap.Parser | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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 Lucene.Net.Util.CharsRef reuse Returns Type Description Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html": {
    "href": "Lucene.Net.Analysis.Synonym.WordnetSynonymParser.html",
    "title": "Class WordnetSynonymParser | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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)"
  },
  "Lucene.Net.Analysis.Tr.ApostropheFilter.html": {
    "href": "Lucene.Net.Analysis.Tr.ApostropheFilter.html",
    "title": "Class ApostropheFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ApostropheFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Tr.ApostropheFilterFactory.html",
    "title": "Class ApostropheFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream)"
  },
  "Lucene.Net.Analysis.Tr.html": {
    "href": "Lucene.Net.Analysis.Tr.html",
    "title": "Namespace Lucene.Net.Analysis.Tr | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.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>"
  },
  "Lucene.Net.Analysis.Tr.TurkishAnalyzer.html": {
    "href": "Lucene.Net.Analysis.Tr.TurkishAnalyzer.html",
    "title": "Class TurkishAnalyzer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TurkishAnalyzer Lucene.Net.Analysis.Analyzer for Turkish. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStreamComponents A Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html": {
    "href": "Lucene.Net.Analysis.Tr.TurkishLowerCaseFilter.html",
    "title": "Class TurkishLowerCaseFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter TurkishLowerCaseFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream in Lucene.Net.Analysis.TokenStream to filter Methods | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Tr.TurkishLowerCaseFilterFactory.html",
    "title": "Class TurkishLowerCaseFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.TokenStream Overrides TokenFilterFactory.Create(TokenStream) | Improve this Doc View Source GetMultiTermComponent() Declaration public virtual AbstractAnalysisFactory GetMultiTermComponent() Returns Type Description AbstractAnalysisFactory Implements IMultiTermAwareComponent"
  },
  "Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html": {
    "href": "Lucene.Net.Analysis.Util.AbstractAnalysisFactory.html",
    "title": "Class AbstractAnalysisFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Util.BufferedCharFilter.html": {
    "href": "Lucene.Net.Analysis.Util.BufferedCharFilter.html",
    "title": "Class BufferedCharFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.CharFilter BaseCharFilter BufferedCharFilter Implements System.IDisposable Inherited Members BaseCharFilter.Correct(Int32) BaseCharFilter.LastCumulativeDiff BaseCharFilter.AddOffCorrectMap(Int32, Int32) Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html": {
    "href": "Lucene.Net.Analysis.Util.CharacterUtils.CharacterBuffer.html",
    "title": "Class CharacterUtils.CharacterBuffer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Analysis.Util.CharacterUtils.html": {
    "href": "Lucene.Net.Analysis.Util.CharacterUtils.html",
    "title": "Class CharacterUtils | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CharacterUtils CharacterUtils provides a unified interface to Character-related operations to implement backwards compatible character operations based on a Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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(ICharSequence) Return the number of characters in seq . Declaration public abstract int CodePointCount(ICharSequence seq) Parameters Type Name Description J2N.Text.ICharSequence seq Returns Type Description System.Int32 | Improve this Doc View Source CodePointCount(Char[]) Return the number of characters in seq . Declaration public abstract int CodePointCount(char[] seq) Parameters Type Name Description System.Char [] seq Returns Type Description System.Int32 | 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 CodePointCount(StringBuilder) Return the number of characters in seq . Declaration public abstract int CodePointCount(StringBuilder seq) Parameters Type Name Description System.Text.StringBuilder 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 Lucene.Net.Util.LuceneVersion passed to GetInstance(LuceneVersion) this method implements supplementary character awareness when filling the given buffer. For all Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion instance. Declaration public static CharacterUtils GetInstance(LuceneVersion matchVersion) Parameters Type Name Description Lucene.Net.Util.LuceneVersion matchVersion a version instance Returns Type Description CharacterUtils a CharacterUtils implementation according to the given Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Util.CharArrayMap.html": {
    "href": "Lucene.Net.Analysis.Util.CharArrayMap.html",
    "title": "Class CharArrayMap | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 ."
  },
  "Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html": {
    "href": "Lucene.Net.Analysis.Util.CharArrayMap-1.EntryIterator.html",
    "title": "Class CharArrayMap<TValue>.EntryIterator | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html": {
    "href": "Lucene.Net.Analysis.Util.CharArrayMap-1.EntrySet_.html",
    "title": "Class CharArrayMap<TValue>.EntrySet_ | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.CharArrayMap-1.html": {
    "href": "Lucene.Net.Analysis.Util.CharArrayMap-1.html",
    "title": "Class CharArrayMap<TValue> | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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`2.Remove(`0) . 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)"
  },
  "Lucene.Net.Analysis.Util.CharArrayMapExtensions.html": {
    "href": "Lucene.Net.Analysis.Util.CharArrayMapExtensions.html",
    "title": "Class CharArrayMapExtensions | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.CharArraySet.html": {
    "href": "Lucene.Net.Analysis.Util.CharArraySet.html",
    "title": "Class CharArraySet | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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>)"
  },
  "Lucene.Net.Analysis.Util.CharArraySetExtensions.html": {
    "href": "Lucene.Net.Analysis.Util.CharArraySetExtensions.html",
    "title": "Class CharArraySetExtensions | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.CharFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Util.CharFilterFactory.html",
    "title": "Class CharFilterFactory | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CharFilterFactory Abstract parent class for analysis factories that create Lucene.Net.Analysis.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 Lucene.Net.Analysis.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()"
  },
  "Lucene.Net.Analysis.Util.CharTokenizer.html": {
    "href": "Lucene.Net.Analysis.Util.CharTokenizer.html",
    "title": "Class CharTokenizer | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion argument. Based on the given Lucene.Net.Util.LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For Lucene.Net.Util.LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer CharTokenizer LetterTokenizer WhitespaceTokenizer IndicTokenizer RussianLetterTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.Dispose(Boolean) Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion matchVersion Lucene version to match Lucene.Net.Util.AttributeSource.AttributeFactory factory the attribute factory to use for this Lucene.Net.Analysis.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 Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.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 Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Util.ClasspathResourceLoader.html": {
    "href": "Lucene.Net.Analysis.Util.ClasspathResourceLoader.html",
    "title": "Class ClasspathResourceLoader | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.ElisionFilter.html": {
    "href": "Lucene.Net.Analysis.Util.ElisionFilter.html",
    "title": "Class ElisionFilter | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class ElisionFilter Removes elisions from a Lucene.Net.Analysis.TokenStream . For example, \"l'avion\" (the plane) will be tokenized as \"avion\" (plane). Elision in Wikipedia Inheritance System.Object Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter ElisionFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input Lucene.Net.Analysis.TokenFilter.End() TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenFilter.Reset() Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream input the source Lucene.Net.Analysis.TokenStream CharArraySet articles a set of stopword articles Methods | Improve this Doc View Source IncrementToken() Increments the Lucene.Net.Analysis.TokenStream with a CharTermAttribute without elisioned start Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Util.ElisionFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Util.ElisionFilterFactory.html",
    "title": "Class ElisionFilterFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Util.FilesystemResourceLoader.html": {
    "href": "Lucene.Net.Analysis.Util.FilesystemResourceLoader.html",
    "title": "Class FilesystemResourceLoader | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.FilteringTokenFilter.html": {
    "href": "Lucene.Net.Analysis.Util.FilteringTokenFilter.html",
    "title": "Class FilteringTokenFilter | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.TokenFilter FilteringTokenFilter StopFilter TypeTokenFilter CodepointCountFilter KeepWordFilter LengthFilter Implements System.IDisposable Inherited Members Lucene.Net.Analysis.TokenFilter.m_input TokenFilter.Dispose(Boolean) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion version the Lucene match version Lucene.Net.Analysis.TokenStream in the Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion version the Lucene match version System.Boolean enablePositionIncrements whether to increment position increments when filtering out terms Lucene.Net.Analysis.TokenStream input the input to consume Fields | Improve this Doc View Source m_version Declaration protected readonly LuceneVersion m_version Field Value Type Description Lucene.Net.Util.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 Lucene.Net.Analysis.TokenFilter.End() | Improve this Doc View Source IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.TokenFilter.Reset() | Improve this Doc View Source SetEnablePositionIncrements(Boolean) If true , this Lucene.Net.Analysis.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"
  },
  "Lucene.Net.Analysis.Util.html": {
    "href": "Lucene.Net.Analysis.Util.html",
    "title": "Namespace Lucene.Net.Analysis.Util | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Analysis.CharFilter instances. CharTokenizer An abstract base class for simple, character-oriented tokenizers. You must specify the required Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion argument. Based on the given Lucene.Net.Util.LuceneVersion either the new API or a backwards compatibility layer is used at runtime. For Lucene.Net.Util.LuceneVersion < 3.1 the backwards compatibility layer ensures correct behavior even for indexes build with previous versions of Lucene. If a Lucene.Net.Util.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 Lucene.Net.Util.LuceneVersion < 3.1. Note: If you use a subclass of CharTokenizer with Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.Analyzer s that need to make use of stopword sets. TokenFilterFactory Abstract parent class for analysis factories that create Lucene.Net.Analysis.TokenFilter instances. TokenizerFactory Abstract parent class for analysis factories that create Lucene.Net.Analysis.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 ."
  },
  "Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html": {
    "href": "Lucene.Net.Analysis.Util.IMultiTermAwareComponent.html",
    "title": "Interface IMultiTermAwareComponent | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.IResourceLoader.html": {
    "href": "Lucene.Net.Analysis.Util.IResourceLoader.html",
    "title": "Interface IResourceLoader | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.IResourceLoaderAware.html": {
    "href": "Lucene.Net.Analysis.Util.IResourceLoaderAware.html",
    "title": "Interface IResourceLoaderAware | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.OpenStringBuilder.html": {
    "href": "Lucene.Net.Analysis.Util.OpenStringBuilder.html",
    "title": "Class OpenStringBuilder | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.RollingCharBuffer.html": {
    "href": "Lucene.Net.Analysis.Util.RollingCharBuffer.html",
    "title": "Class RollingCharBuffer | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.StemmerUtil.html": {
    "href": "Lucene.Net.Analysis.Util.StemmerUtil.html",
    "title": "Class StemmerUtil | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html": {
    "href": "Lucene.Net.Analysis.Util.StopwordAnalyzerBase.html",
    "title": "Class StopwordAnalyzerBase | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class StopwordAnalyzerBase Base class for Lucene.Net.Analysis.Analyzer s that need to make use of stopword sets. Inheritance System.Object Lucene.Net.Analysis.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) Lucene.Net.Analysis.Analyzer.Strategy Lucene.Net.Analysis.Analyzer.Dispose() Analyzer.Dispose(Boolean) Lucene.Net.Analysis.Analyzer.GLOBAL_REUSE_STRATEGY Lucene.Net.Analysis.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 Lucene.Net.Analysis.Analyzer with an empty stopword set Declaration protected StopwordAnalyzerBase(LuceneVersion version) Parameters Type Name Description Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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 Lucene.Net.Util.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"
  },
  "Lucene.Net.Analysis.Util.TokenFilterFactory.html": {
    "href": "Lucene.Net.Analysis.Util.TokenFilterFactory.html",
    "title": "Class TokenFilterFactory | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TokenFilterFactory Abstract parent class for analysis factories that create Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream Declaration public abstract TokenStream Create(TokenStream input) Parameters Type Name Description Lucene.Net.Analysis.TokenStream input Returns Type Description Lucene.Net.Analysis.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()"
  },
  "Lucene.Net.Analysis.Util.TokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Util.TokenizerFactory.html",
    "title": "Class TokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 Documentation",
    "keywords": "Class TokenizerFactory Abstract parent class for analysis factories that create Lucene.Net.Analysis.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 Lucene.Net.Analysis.TokenStream of the specified input using the given Lucene.Net.Util.AttributeSource.AttributeFactory Declaration public abstract Tokenizer Create(AttributeSource.AttributeFactory factory, TextReader input) Parameters Type Name Description Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer | Improve this Doc View Source Create(TextReader) Creates a Lucene.Net.Analysis.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 Lucene.Net.Analysis.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()"
  },
  "Lucene.Net.Analysis.Util.WordlistLoader.html": {
    "href": "Lucene.Net.Analysis.Util.WordlistLoader.html",
    "title": "Class WordlistLoader | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.LuceneVersion matchVersion the Lucene Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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 Lucene.Net.Util.LuceneVersion matchVersion the Lucene.Net.Util.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 Lucene.Net.Analysis.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 Lucene.Net.Analysis.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. Lucene.Net.Util.LuceneVersion matchVersion the Lucene.Net.Util.LuceneVersion Returns Type Description CharArraySet A CharArraySet with the reader's words"
  },
  "Lucene.Net.Analysis.Wikipedia.html": {
    "href": "Lucene.Net.Analysis.Wikipedia.html",
    "title": "Namespace Lucene.Net.Analysis.Wikipedia | Apache Lucene.NET 4.8.0-beta00011 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>"
  },
  "Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html": {
    "href": "Lucene.Net.Analysis.Wikipedia.WikipediaTokenizer.html",
    "title": "Class WikipediaTokenizer | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource Lucene.Net.Analysis.TokenStream Lucene.Net.Analysis.Tokenizer WikipediaTokenizer Implements System.IDisposable Inherited Members Lucene.Net.Analysis.Tokenizer.m_input Tokenizer.CorrectOffset(Int32) Tokenizer.SetReader(TextReader) Lucene.Net.Analysis.TokenStream.Dispose() Lucene.Net.Util.AttributeSource.GetAttributeFactory() Lucene.Net.Util.AttributeSource.GetAttributeClassesEnumerator() Lucene.Net.Util.AttributeSource.GetAttributeImplsEnumerator() Lucene.Net.Util.AttributeSource.AddAttributeImpl(Lucene.Net.Util.Attribute) Lucene.Net.Util.AttributeSource.AddAttribute<T>() Lucene.Net.Util.AttributeSource.HasAttributes Lucene.Net.Util.AttributeSource.HasAttribute<T>() Lucene.Net.Util.AttributeSource.GetAttribute<T>() Lucene.Net.Util.AttributeSource.ClearAttributes() Lucene.Net.Util.AttributeSource.CaptureState() Lucene.Net.Util.AttributeSource.RestoreState(Lucene.Net.Util.AttributeSource.State) Lucene.Net.Util.AttributeSource.GetHashCode() AttributeSource.Equals(Object) AttributeSource.ReflectAsString(Boolean) Lucene.Net.Util.AttributeSource.ReflectWith(Lucene.Net.Util.IAttributeReflector) Lucene.Net.Util.AttributeSource.CloneAttributes() Lucene.Net.Util.AttributeSource.CopyTo(Lucene.Net.Util.AttributeSource) Lucene.Net.Util.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 Lucene.Net.Util.AttributeSource.AttributeFactory . Declaration public WikipediaTokenizer(AttributeSource.AttributeFactory factory, TextReader input, int tokenOutput, ICollection<string> untokenizedTypes) Parameters Type Name Description Lucene.Net.Util.AttributeSource.AttributeFactory factory The Lucene.Net.Util.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 Lucene.Net.Analysis.TokenStream.End() | Improve this Doc View Source IncrementToken() Lucene.Net.Analysis.TokenStream.IncrementToken() Declaration public override sealed bool IncrementToken() Returns Type Description System.Boolean Overrides Lucene.Net.Analysis.TokenStream.IncrementToken() | Improve this Doc View Source Reset() Lucene.Net.Analysis.TokenStream.Reset() Declaration public override void Reset() Overrides Lucene.Net.Analysis.Tokenizer.Reset() Implements System.IDisposable"
  },
  "Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html": {
    "href": "Lucene.Net.Analysis.Wikipedia.WikipediaTokenizerFactory.html",
    "title": "Class WikipediaTokenizerFactory | Apache Lucene.NET 4.8.0-beta00011 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 Lucene.Net.Util.AttributeSource.AttributeFactory factory System.IO.TextReader input Returns Type Description Lucene.Net.Analysis.Tokenizer Overrides TokenizerFactory.Create(AttributeSource.AttributeFactory, TextReader)"
  },
  "Lucene.Net.Tartarus.Snowball.Among.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Among.html",
    "title": "Class Among | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.ArmenianStemmer.html",
    "title": "Class ArmenianStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.BasqueStemmer.html",
    "title": "Class BasqueStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.CatalanStemmer.html",
    "title": "Class CatalanStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.DanishStemmer.html",
    "title": "Class DanishStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.DutchStemmer.html",
    "title": "Class DutchStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.EnglishStemmer.html",
    "title": "Class EnglishStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.FinnishStemmer.html",
    "title": "Class FinnishStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.FrenchStemmer.html",
    "title": "Class FrenchStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.German2Stemmer.html",
    "title": "Class German2Stemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.GermanStemmer.html",
    "title": "Class GermanStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball.Ext | Apache Lucene.NET 4.8.0-beta00011 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."
  },
  "Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.HungarianStemmer.html",
    "title": "Class HungarianStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.IrishStemmer.html",
    "title": "Class IrishStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.ItalianStemmer.html",
    "title": "Class ItalianStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.KpStemmer.html",
    "title": "Class KpStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.LovinsStemmer.html",
    "title": "Class LovinsStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.NorwegianStemmer.html",
    "title": "Class NorwegianStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.PorterStemmer.html",
    "title": "Class PorterStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.PortugueseStemmer.html",
    "title": "Class PortugueseStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.RomanianStemmer.html",
    "title": "Class RomanianStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.RussianStemmer.html",
    "title": "Class RussianStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.SpanishStemmer.html",
    "title": "Class SpanishStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.SwedishStemmer.html",
    "title": "Class SwedishStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html": {
    "href": "Lucene.Net.Tartarus.Snowball.Ext.TurkishStemmer.html",
    "title": "Class TurkishStemmer | Apache Lucene.NET 4.8.0-beta00011 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()"
  },
  "Lucene.Net.Tartarus.Snowball.html": {
    "href": "Lucene.Net.Tartarus.Snowball.html",
    "title": "Namespace Lucene.Net.Tartarus.Snowball | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "Lucene.Net.Tartarus.Snowball.SnowballProgram.html": {
    "href": "Lucene.Net.Tartarus.Snowball.SnowballProgram.html",
    "title": "Class SnowballProgram | Apache Lucene.NET 4.8.0-beta00011 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"
  },
  "overview.html": {
    "href": "overview.html",
    "title": "Lucene.Net.Analysis.Common | Apache Lucene.NET 4.8.0-beta00011 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 <xref:Lucene.Net.Analysis> package documentation. This module contains concrete components (<xref:Lucene.Net.Analysis.CharFilter>s, <xref:Lucene.Net.Analysis.Tokenizer>s, and (<xref:Lucene.Net.Analysis.TokenFilter>s) for analyzing different types of content. It also provides a number of <xref:Lucene.Net.Analysis.Analyzer>s for different languages that you can use to get started quickly."
  }
}